const importDirectives = (Vue) => {
  //按钮点击防抖
  Vue.directive('debounce', {
    inserted(el, binding) {
      const debounce = function (fn, delay) {
        var timer = null;
        return function (...args) {
          if (timer) {
            clearTimeout(timer)
          }
          timer = setTimeout(() => {
            // 如果把null作为this的绑定对象传入到call、apply或者bind，这些值在调用时会被忽略，实际应用的是默认绑定规则
            fn.apply(null, args)//此处用apply(null,args)完全是因为想要在传参时不展开数组的情况下直接调用函数，如果函数并不关心this的话，你仍然需要传入一个占位置，这时null是一个不错的选择。
            // fn(...args)//es6中完全可以使用扩展运算符...来替代apply(null,args)的写法
          }, delay)
        }
      }
      el[binding.value.eventType] = debounce(binding.value.eventFunc, binding.value.delay)
    }
  }),
    //按钮点击节流
    Vue.directive('throttle', {
      inserted(el, binding) {
        //1.用定时器的写法
        // const throttle = function (fn, delay) {
        //   var validate = false
        //   return function (...args) {
        //     if (validate) {
        //       return
        //     }
        //     validate = true
        //     setTimeout(() => {
        //     如果把null作为this的绑定对象传入到call、apply或者bind，这些值在调用时会被忽略，实际应用的是默认绑定规则
        //      // fn.apply(null, args)//此处用apply(null,args)完全是因为想要在传参时不展开数组的情况下直接调用函数，如果函数并不关心this的话，你仍然需要传入一个占位置，这时null是一个不错的选择。
        //       fn(...args)//es6中完全可以使用扩展运算符...来替代apply(null,args)的写法
        //       validate = false
        //     }, delay)
        //   }
        // }
        //    2.时间戳写法
        const throttle = function (fn, delay) {
          var endTime = null
          return function (...args) {
            let starTime = Date.now()
            if (starTime - endTime > delay) {
              // 如果把null作为this的绑定对象传入到call、apply或者bind，这些值在调用时会被忽略，实际应用的是默认绑定规则
              // fn.apply(null, args)//此处用apply(null,args)完全是因为想要在传参时不展开数组的情况下直接调用函数，如果函数并不关心this的话，你仍然需要传入一个占位置，这时null是一个不错的选择。
              fn(...args)//es6中完全可以使用扩展运算符...来替代apply(null,args)的写法
              endTime = starTime
            }
          }
        }
        el[binding.value.eventType] = throttle(binding.value.eventFunc, binding.value.delay)
      }
    })
}
export default importDirectives
